約 5,106,802 件
https://w.atwiki.jp/cowandbow/pages/27.html
A s Video Converter http //bluesky23.hp.infoseek.co.jp/ (.NET Framework 2.0必須) Avivo Video Converterをインストールすると登録されるDirectShowフィルターを使って動画を変換できます。 かなり高速かつ多種のソースファイルに対応しているので役に立ちます。 Avivo Video Converterで対応しているAVI/WMV/MPEG-1/-2の他に FLV/MKV等環境が準備されていれば再生できる形式のほとんどを高速変換することが出来ます。 対応形式 全てlibavcodecによります。こちら側では対応形式を増やすことは出来ませんのでご了承ください。 対応している主なコンテナ 3GP/3G2/AVI/ASF/FLV/Matroska(MKV,MKA)/MOV/MPEG(MPEG,MP4)/NSV/RealMedia 他、全79種類 対応している主な動画・画像形式 AVS/DivX/FLV/H.261,263,264/MPEG1,2,4/MS-MPEG4/RealVideo/VP3,5,6/WMV7,8,9/XviD 他、全101種類 インストーラー及びZIPパッケージ こちらの#05、#06からダウンロードできます。 DirectShow フィルターの最新バージョンは atixcode.dll、atidvcr.dll共に9.14.0.60504です。 このバージョンを日本語化した物がこちらの#04にあります。 ZIPファイル内のinst.batを実行すると簡単に作業を行うことが出来ます。 元に戻す場合はuninst.batを実行してください。 AVIVO Video Converterに同梱されている物のバージョンは atixcode.dll バージョン9.12.0.51129 atidvcr.dll バージョン9.10.0.50505 です。 FLVファイルをエンコードする際に音声が早送りになる場合 AC3Filterが邪魔をしています GraphEditでAC3Filterのプロパティを開き[System]タブ→[PCM]のチェックボックスをOFF GraphEditを使わない場合は「ファイル名を指定して実行」から regsvr32.exe /u ac3DX.ax 詳細準備中
https://w.atwiki.jp/sonicclock/pages/25.html
KbMedia Playerのプラグインを使用し、多数の形式を.wavに変換出来るツール。 非常に便利。 対応形式 KbMediaPlayerに対応する形式 KbMediaPlayerで動作するWinampプラグインの形式(他にツールが必要) Download http //www.autch.net/page/online/
https://w.atwiki.jp/dtmer/pages/190.html
コーデック Coder・Decoderの略。 圧縮と解凍を行うためのプラグインライブラリ群のこと。 音声や動画を扱うソフト(プレーヤーも例外ではない)では 一般的に読み込むデータが圧縮されているため、その形式に 適合した解凍するためのコーデックが必要となる。 関連項目 ACM エンコーダ デコーダ
https://w.atwiki.jp/vpvpwiki/pages/225.html
アドバイス:AVIファイルの入出力 背景用AVIの読み込み■MMDの背景AVI読み込みについてのまとめ MMDからの出力とNIVE 背景用AVIの読み込み 2chMMDスレッドにまとめた記事があったので、以下、引用します。※ MMD ver.5世代に書かれた記事です。 【MMD】MikuMikuDance動画制作/鑑賞スレ【初音ミク】 part40 URL http //pc12.2ch.net/test/read.cgi/streaming/1253810270/203-271 203 名前: 自治スレにてLRおよび名無し名変更改正論議中 投稿日: 2009/09/27(日) 20 26 22 ID KrT5y9t00 長くなりますけど、MMDの背景AVIの読み込みの件について。 元々NiVE用にまとめようと思ってたんで丁度よかった。 既出かもしれませんけど 167-170あたりが困ってるので気にしない。 文字ばかりでわかりにくいのは勘弁。きっと誰かが綺麗にまとめてくれるはずさ。 ●よく 「Craving Explorerの"AVIで保存"で落としたAVIが背景AVIとして読み込めない」 といったトラブルを聞きますが、おそらくMMDの背景AVI読み込みの仕様として、 「VFW(Video For Windows)でデコードできること。 (つまり対応するVFWコーデック(VCMコーデック)が有効になっていること)」 という条件があるのではないかと思います。(たぶんVFW APIを使って読み込んでる?) ●CravingExplorerで"AVIで保存"を行なった場合、保存されるAVIは 映像コーデックとして「MS-MPEG4 v2」というコーデックを利用しています。 これはMicrosoftの純正コーデックなのですが、少なくとも最近のPC(というかWMP)では デコーダはVFWコーデックとしてではなく、DirectShowフィルタとしてのみ提供されています。 そのためVFWでのデコードができず、背景AVIとして利用できないものと思われます。 (WMPとかで再生できるのは、DirectShowでデコードして再生しているからですね。 WMP11を入れてるならMpeg4 Decoder DMOってのがDirectShowデコードに使われます) ●つまり背景AVIとして使うためには、対応するVFWコーデックをインストールすればいいのですが、 コーデックを個別に入れるのはかなり面倒ですし、入手方法がややこしいものもあります。 そのため、簡単な解決策として、ffdshowのVFW機能を利用するのがよいと思います。 ffdshowは、「K-Lite Codec Pack」「CCCP(Combined Community Codec Pack)」 「WECP(Windows Essentials Codec Pack)」などのコーデックパックにも含まれていますが、 もしかするとコーデックパックによってはVFW機能が利用できないかも。特に 171のWECPとかが怪しい。 正直、個人的にはコーデックパックのインストールはオススメできないので、 まだ何も入れてない方は「ffdshow tryouts」を単品で入れておくとよいでしょう。 ~続く~ 204 名前: 自治スレにてLRおよび名無し名変更改正論議中 投稿日: 2009/09/27(日) 20 28 05 ID KrT5y9t00 ~続き~ ●例えばCraving Explorerの"AVIで保存"で落としたAVIを読み込みたい場合。 まずは「すべてのプログラム」のところから、ffdshowの「VFWの設定」を開きましょう。 (「ビデオデコーダーの設定」ではなく「VFWの設定」です。これら2つは設定画面が似ているので要注意。 「ビデオデコーダーの設定」はDirectShowの設定なので、背景AVIの読み込みでは意味がありません。) コーデックパックを使っている人はコーデックパックのサブメニューになってるかも。 設定画面が開いたら、「Decoder」のタブを開きましょう。 右側に形式やデコーダーの一覧が出てくるはずです。ここで、「MS-MPEG4 v2」を有効にしてやります。 ぱっと見どれがそうなのかわかりにくいですが、 「MS-MPEG4 v2」コーデックを表すFOURCCは"MP42"になります。 "形式"がMP42になっている部分の"デコーダー"欄が「無効」になっていると思うので、 「無効」の部分をクリックし、「libavcodec」に変更しましょう。これでMP42のVFWデコードが有効になります。 この状態で「背景AVIの読み込み」を行なえば、問題なく読み込めるようになっているはずです。 ●背景"AVI"ということで、使える映像の種類がAVIに限られてますし、 やっぱりVFW APIで読み込んでるのかな? だとすると基本的に2GB制限のあるAVI 1.0コンテナしか読み込めないかもしれません。 AVI 2.0も一見普通に読めるように見えますが、内部で独自処理をいれてAVI 2.0に対応していない限り、 途中でおかしくなる可能性もあると思われます。そのへんの詳しい仕様はよくわかりません。 うまくいかない場合は、後述するAvisynthのDirectShowSource()を利用するとよいかも。 ●別の方法としては、Avisynthを利用するという手があります。 CravingExplorerで落としたAVIを、avsスクリプト内でDirectShowSource()で読み込み、 そのavsスクリプトを背景AVIとして読み込めば、ffdshow無しでもCravingExplorerのAVIを読み込めます。 デコードはDirectShowがやるけど、Avisynthを介在させることでVFWで読み込みができるようになるという感じ。 AVI2.0コンテナのAVIも、この方法で背景AVIとして読ませることができるはず。 もちろん対応するデコーダ(この場合はVFWコーデックでもDirectShowフィルタでもよい)は必要ですが。 このへんは以前スレでも話が出ていたような気がします。 ~更に続く~ 205 名前: 自治スレにてLRおよび名無し名変更改正論議中 投稿日: 2009/09/27(日) 20 29 27 ID KrT5y9t00 ~更に続き~ ●背景AVIとして使いたいAVIファイルの、 「映像コーデックのFOURCCは何なのか」 「コンテナはAVI 1.0なのかAVI 2.0なのか」 を調べるには、コーデックチェッカーと呼ばれるソフトを利用します。 個人的なオススメは、 「MMName2」 「真空波動研SuperLite」 の2つを連携させて使うことです。 MMName2のメニューで真空波動研との連携設定ができ、その後はAVIファイルを MMName2にD Dするだけで、両方のソフトでの解析結果を一度に見ることができます。 真空波動研だけだとFOURCCまでわからないこともありますので便利です。 ●ちなみに、 「NiVEでVFWInputやDSVideoInputを使う場合」 「AviutlでAVI File ReaderやDirectShow File Readerを使う場合」 にも同じような概念が適用されます。 VFWコーデックがあるならVFWで読み込めますし、 DirectShowフィルタしかないならDirectShowで読み込むことになります。 (Aviutlの場合はプラグイン優先度の設定なども影響しますが。) 関連リンク MMName2 harry氏 ツール置き場 真空波動研SuperLite 黒羽製作所氏 [[黒羽製作所 http //kurohane.net/」] 206 名前: 自治スレにてLRおよび名無し名変更改正論議中 投稿日: 2009/09/27(日) 20 31 25 ID KrT5y9t00 そんなわけでまとめ。 ■MMDの背景AVI読み込みについてのまとめ まずは「MMName2」「真空波動研SuperLite」などを使って、背景AVIとして使いたいAVIファイルのコンテナや映像コーデックを調べましょう。 コンテナがAVI 2.0の場合は、AviutlやVirtualDubModなどでAVI 1.0に変換するか、AvisynthのDirectShowSource()を使って読みこんだほうがいいかも。(ただ、もしかすると背景AVI読み込みはAVI 2.0にも対応しているかも? もし対応しているならそのまま読み込んでOK。) AVIファイルを背景AVIとして読み込むためには、VFW(Video For Windows)レベルでデコードできるようにする必要があります。 そのため、以下のいずれかの方法で対処する必要があります。 方法1.対応するVFWコーデック(VCMコーデック)を入れる 方法2.ffdshowをインストールし、「VFWの設定」で対応するVFWコーデックを有効にする 方法3.AvisynthのDirectShowSource()を使い、そのavsを背景AVIとして読み込む ※ただし、これで問題なく読み込めるかどうかは各自の再生環境にも依存するので、 場合によってはうまく読み込めないこともあるかもしれません。 208 名前: 自治スレにてLRおよび名無し名変更改正論議中 投稿日: 2009/09/27(日) 20 56 25 ID KrT5y9t00 206で1つ忘れてました。 方法4.AviutlやVirtualDubModなどを使い、読めないAVIを別のコーデックで再エンコードして使う。 (自分のPCに入っているVFWコーデックを使う。) あと、間違ってるとことかあったら指摘お願いします。 背景AVI読み込みがAVI 2.0に対応してるかどうかはよくわからないんですよね。 2GBを超えるAVI 2.0を読み込ませてみて、最後まで正しく見れるなら大丈夫だと思うんですが、 今ちょっと自分の環境では試せないのでなんとも。 271 名前: 自治スレにてLRおよび名無し名変更改正論議中 投稿日: 2009/09/28(月) 18 20 04 ID WADHdaDT0 203-208で書いた、背景AVI読み込みの件ですが、 自分の環境で試せるようになったので2GBを超えるAVI 2.0なAVIを読み込ませてみました。 一応読み込めはするものの、フレームを先に進めていくと 「AVIファイルを読み込めません」 というエラーが発生。 やはりVFWで読み込んでいるため、2GBを超えた位置に移動しようとするとエラーになるものと思われます。 そんなわけで、やはり使用できる背景AVIは、 「VFWでデコードできるAVI 1.0(サイズ上限2GB)」 ということになるようです。 MMDからの出力とNIVE 2chのMikuMikuDanceスレッドより引用 ※ MMD ver.5世代に書かれた記事です。 【MMD】MikuMikuDance動画制作/鑑賞スレ【初音ミク】 part40 http //pc12.2ch.net/test/read.cgi/streaming/1253810270/362 362 名前: 自治スレにてLRおよび名無し名変更改正論議中 投稿日: 2009/09/30(水) 17 36 13 ID Js/ImyEX0 NiVEスレの者ですが、MMD v5.03以降で出力した、 「コンテナ形式がAVI 2.0(OpenDML)のAVIファイル」 をNiVEに読み込ませる際の注意などをまとめてみました。 詳細な説明は以下のリンク先を参照して下さい。 ttp //nicoae.if.land.to/index.php?%BC%C1%CC%E4%C8%A2#c0cbed29 以下は簡単なまとめです、 v5.03以前のAVI 1.0形式の頃と同じ扱いをしていると、色々な罠があるようですのでご注意下さい。 ●MMDから出力したAVI 2.0をそのままNiVEに読み込む場合は、 基本的に「DirectShow入力プラグイン」で読み込む必要があります。 VFWInputで読み込めるように見えますが、1GB以上のデータが 読めないという罠があるのでやめましょう。 (「DirectShow入力プラグイン」がうまく動かないような場合は、 「Aviutl入力/出力プラグイン利用」というプラグインを 使うという方法もあります。) (64bit版WindowsでDirectShow入力プラグインを使えるようにする方法については ttp //pc12.2ch.net/test/read.cgi/streaming/1241795466/659 を参照して下さい。) ●アルファチャンネル付きのAVIをNiVEに読み込ませたい場合、 以前のようにMMDから出力したAVIファイルをそのまま 「VFWInput(32bit ARGB Video Only)」 で読ませようとすると、1GB以上のデータが読めません。 というか、その1GBのデータも割りと無理やり読み込んでる感じです。 アルファチャンネル付きのAVIを読ませたい場合は、 1.無圧縮で出力してDSVideoInputで読み込む。 2.ファイルサイズが2GB未満なら、VirtualDubModや Avi-Mux GUIなどでAVI 1.0コンテナにつめかえた上で VFWInput(32bit ARGB)で読み込む 3.Avisynthを使ってavsでOpenDMLSource()などで AVI 2.0ファイルをRGB32で読み込み、 そのavsファイルをVFWInput(32bit ARGB)で読み込む といった方法をとる必要がありますのでご注意下さい。 色々調べたり試したりした結果ですが、付け焼刃的な知識なので、 間違いや抜けてる点などがあれば指摘をお願いします。 m(_ _)m 名前 コメント 関連記事 AVIファイルの入出力 アクセサリ関連 エンコード関連 カメラ操作について サイズの異なるモデルへのモーション移植 モデルデータ等の差し換え・編集 モーション関連 正確な角度の計算方法 wikiタグ: モーション
https://w.atwiki.jp/directx/pages/14.html
簡易掲示板です。 何かありましたらコメントを。 test -- 管理人 (2009-02-11 12 22 21) DirectMusicですが、現在のバージョンだと使用できないと思ったのですが使用できるのでしょうか? ムリでしたらDirectSoundでの方法など表記をお願いできないでしょうか? -- 勉強中 (2010-02-03 23 10 26) DirectMusicはDirectX SDK August 2007をインストールし、インクルードファイル、ライブラリの参照設定で最新のDirectXよりも上位にAugust 2007の参照設定を作ると現在のバージョンでもコンパイルできます。 -- 管理人 (2010-03-19 22 22 00) ただし、DirectMusicはWindows7だと32bit版にしかありません。DirectSoundは.wavファイルしか再生できないので。midiを再生するとなるとmciを使うのが簡単です。それかDirectShowで再生するという事になるでしょう。DirectShowでの再生プログラムを作成しておきます。しばらくお待ちください。 -- 管理人 (2010-03-19 22 27 05) 現状でMIDIファイルを扱うにはOpenAL + LibSynth++ という選択肢がベストな気がします。 -- 管理人 (2010-03-19 23 02 47) チュートリアル4のプログラムなのですが、再描画がされないです。確認よろしくお願いします。 -- 匿名 (2010-03-23 17 14 52) チュートリアル4のプログラムは管理人の環境では再描画されています。 -- 管理人 (2010-03-23 19 46 39) 当サイトのログインパスワードを紛失しました。@WIKIに問い合わせましたが新パスワードのメールが届かない状況です。よって当サイトはこれ以上、更新できません。 -- 管理人 (2010-03-23 19 50 55) こちらに新サイトを作成しました。→ http //www21.atwiki.jp/opengl/ -- 管理人 (2010-03-23 19 51 44) 現在は3Dに、より理解を深めるためにDirectXを捨てOpenGLの勉強をしています。 -- 管理人 (2010-03-23 19 55 02) DirectShowでの再生プログラムを作成しました。 → http //www21.atwiki.jp/opengl/pages/37.html -- 管理人 (2010-04-29 22 52 09) 名前 コメント
https://w.atwiki.jp/terragen/pages/208.html
Node Type Displacement Shader ノード説明と目的 『Redirect Shader』は、サーフェス法線が正のX軸、Y軸、Z軸に沿っていると見なし、それぞれに付属したシェーダで巧妙に加工します。基本的に、シェーダを呼び出す前にサーフェス法線のシェーディング状態変数を変更するので、サーフェスを異なる法線で変位させています。法線に沿って変位するシェーダは、X、Y、Zの方向に沿って変位します。ディスプレースメントシェーダが負の方向に変位すると(例えば、サーフェスを持ち上げるのではなく凹ませる)、負のX、Y、Z方向の変位が果たされます。 設定 X shader X軸シェーダ このパラメータに付属されているシェーダは、サーフェス法線がそれぞれX、Y、Z軸に沿っていると見なします。下記画像は、それぞれの方向に『Power fractal shader』を付属しています。 Y shader Y軸シェーダ Z shader Z軸シェーダ
https://w.atwiki.jp/kit-ic/pages/65.html
XMedeia Recode データ 読み えっくすめでぃあれこーど 種類 コンバータ・エンコーダ・クロッピング処理その他多数 能力 さまざまな物を変換する程度の能力 フリーにしては度が過ぎているほどありがたい程度の能力 説明 フリーのコンバータの中でもかなり優秀なフリーソフト。 Sebastian Dorflerより提供されているフリーのコンバータで、注目すべき点はその機能の多さである。まず、フリーのコンバータで求めることは変換できる動画形式の種類だろう、更に欲を言えばサイズの変更、ビットレート変更など言えば数えきれない。そのような機能が一つにまとまったものがこのXMedia Recodeである。 動画データから映像だけ・音声だけの抽出はお手の物、映像や音声の細かい調整、クロッピング(黒枠を消す作業)や、色調補正などフ リ ー で こ こ ま で や る か !?と言わんばかりの多機能ッっぷりに驚きが鬼なるだろう。 操作方法 ファイルを開くを選択 変換したい動画ファイルを選ぶ リストに追加された動画ファイルを選択する 形式を選択する 映像・音声の細かい調整を行う場合はタブで選択し調整を行う クロッピングなどの調整はクロップ/プレビューを選択し調整する 準備ができたらリストに追加を選択する 変換するものを全て選択くしたらエンコードボタンを押す お茶を飲みながら待つ 完☆了 また、バージョンアップする際に時々ではあるが今まで対応していた形式が拒否られるときがあるので注意が必要だぞ☆ 対応する形式 asf / avi / divx / flv / h261 / h263 / h264 / mpg (MPEG-1 / MPEG-2)/ mp4 / mp4v / swf / mov / VOB / wmv など… 出力される形式 asf / avi / flv / H.261 / H.263 / H.264 / mp4 / mov / swf / mpeg (MPEG-1 / MPEG-2) / MPEG TS / VOB / wmv など… 使用可能なコーデック H.264 / DivX / Xvid など… ダウンロード Sebastian Dorfler 引用 k本的にフリーソフト XMedia Recode コメント 名前 コメント
https://w.atwiki.jp/mpegonmac/pages/30.html
「MPEG-4 Part 10 AVC」というISOのMPEG-4映像規格。別名H.264。 名称 AVC:ISO(国際標準化機構)の呼び名。JISの親玉みたいなもん。 H.264:ITU(国際電気通信連合)の呼び名。 AVC/H.264とか単にAVCとか言い方はいろいろだが、合同で作ったので中身は一緒。 性能 MPEG-2の半分のビットレートで同じ画質を達成することを目標に策定された。 エンコードもデコードも重く、2004年頃はマンモスコデックとか言われていた。 技術的には特に画期的なものは無く、既存の技術の集大成的なもの。 コンテナ形式 映像だけの規格なので特に.mp4以外に突っ込む事も可能。 MPEG-2 TSもあれば、CBR-mp3音声と重ねた方が音ずれが少ないとか、いろいろあるようだ。 AVC/H.264対応コーデック MPEG規格は、デコード方式を定める物で、エンコードは各社ご自由にというもの。 JISが決めるのはB5という規格だけで、再生紙だろうが手漉き和紙だろうがB5はB5というのに近い。鴨。 x264:オープンソース・フリー。Macではx264:.mp4, raw出力。コマンドライン。win界ではx264CLIと呼ぶ模様。mencoder:raw, .avi出力。コマンドラインffmpeg:コマンドラインなど。GUIから使えるものもあるが、x264自体はエンコードが終わる前に次のバージョンが出ると言われる程、進捗が激しい。2005年秋現在、安定板のリリースもまだ無い。 NeroDigital AVC (win用)商品。.mp4出力。同社は北米の「DVDバックアップ業界」でDivXに次ぐ地位にあり、技術力に定評がある模様。ちょっと困るのはISO規格に無い.srt字幕入り.mp4 に対応したDVDプレイヤを推進している事。 Apple Quicktime 7, .mp4 , .mov出力。 JM (win)フリー。ISO公式のお手本ソフト。 他にもあるが、いずれも性能というか、ISO MPEG-4 AVC規格のサポート度合いに違いがあるようだ。 2005年秋現在、Mac上で安価またはフリーで使えるものはx264かApple-H.264という事になる。 ネタもと Doom9 ISO 14496-10 (Video) - Advanced Video Coding (AVC) MPEGラボ DVD並みの映像をネットで送るMPEG-4の新方式「AVC(H.264)」とは?
https://w.atwiki.jp/cod4mod/pages/24.html
Sunlight 日光は「ダイレクト」ライトであると思われます。 これが意味することはモデルとワールドマテリアルのスペキュラとノーマルマップはこのライトの影響を受けます。 言い換えると、これは影を付け、スクリプトを通して少しずつ変わることのできるリアルタイムダイナミックライトなのです。 日光は無限の平行光線です。これは空間の一点から光が発散しないことを意味します。 これはCOD4のライトのすべての種類の中で最も単純で使いやすいのです。 あなたは太陽を光らせるために向き、色、強さ(sunlight value)決めなければいけません。 Note You can disable the sun as a primary light if needed by entering "sunIsPrimaryLight" "0" into the world spawn. 1. SunDirection これは COD2 とまったく同じものをもたらします 軸線は光(人たち・もの)にワールドスペースに基づいていて、ローカルではありません。 最初の数は南北の軸線です。 2番目の数は上下の軸線です。 3番目の数は光の方向に沿う軸線であって、エフェクトを持ちません(なぜそれがそこに ? ...だれが知る。) ここにラディアントで全体から細部にいたるまで見るための例がいくつかあります: “sundirection” “0 0 0” --- Light comes from the right “sundirection” “90 0 0” ---Light comes from the bottom “sundirection” “-90 0 0” --- Light comes from the top “sundirection” “0 90 0” --- Light comes from the top “sundirection” “0 180 0” --- Light comes from the left 2. Sun Color/Sunlight (Brightness) 「suncolor 」「# # #」は3つの数を色を設定するために使います。それらは赤/緑/青を表します。 0-255の形式を使う代わりにラディアントは0-1の形式を使います。 値を0-255範囲で0-1適用範囲へ変換するには、数を255で割ってください。 Example 128/255 = .5 (roughly) “sunlight” “#” Is how bright the sun is. You can use values over one if needed. “sunlight” “#”は太陽がどのくらい輝くかです。必要なときover one、valuesを使えます。 ノート:f8を押すことによってラディアントでライトプレビューを有効にできます。太陽と環境光 のすべての設定をすることがこの作業のために必要です。 (Original "http //www.infinityward.com/wiki/index.php?title=Direct_Light") 名前 すべて読む
https://w.atwiki.jp/opengl/pages/218.html
DirectSound で .wav を再生します。 これまでと同様にウインドウハンドルを取得すれば freeglut と DirectSound を組み合わせて使用できます。 #pragma comment(linker, /SUBSYSTEM WINDOWS /ENTRY mainCRTStartup ) #pragma comment(lib, winmm.lib ) #pragma comment(lib, dsound.lib ) #include GL/freeglut/freeglut.h #include mmsystem.h #include dsound.h #include stdio.h #define SAFE_RELEASE(p) {if(p){(p)- Release();(p)=NULL;}}//安全に解放する #define FileName L test.wav #define WIDTH 320 #define HEIGHT 240 HWND hWnd2=NULL; //ウィンドウハンドル HINSTANCE hinstance; //インスタンスのハンドル LPDIRECTSOUND8 lpDS = NULL; // DirectSound8 LPDIRECTSOUNDBUFFER lpPrimary = NULL; // プライマリサウンドバッファ LPDIRECTSOUNDBUFFER lpSecondary = NULL; // セカンダリサウンドバッファ //ウィンドウを検索してHWNDとHINSTANCEを得る BOOL CALLBACK enumWindowsProc(HWND hWnd,LPARAM lParam) { HANDLE hModule=(HANDLE)GetWindowLong(hWnd,GWL_HINSTANCE); if(GetModuleHandle(NULL)==hModule){ wchar_t ClassName[256]; GetClassNameW(hWnd,ClassName,sizeof(ClassName)/sizeof(ClassName[0])); if(wcsncmp(ClassName,L FREEGLUT ,wcslen(ClassName))==0){ hWnd2=hWnd; hinstance=(HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE); return FALSE; } } return TRUE; } // DirectSound初期化 bool InitDS( void ){ HRESULT ret; // DirectSound8を作成 ret = DirectSoundCreate8( NULL, lpDS,NULL ); if( FAILED(ret) ) { printf( サウンドオブジェクト作成失敗\n ); return false; } // 強調モード ret = lpDS- SetCooperativeLevel( hWnd2,DSSCL_EXCLUSIVE|DSSCL_PRIORITY ); if( FAILED(ret) ) { printf( 強調レベル設定失敗\n ); return false; } return true; } // プライマリサウンドバッファの作成 bool CreatePrimaryBuffer( void ){ HRESULT ret; WAVEFORMATEX wf; // プライマリサウンドバッファの作成 DSBUFFERDESC dsdesc; ZeroMemory( dsdesc,sizeof(DSBUFFERDESC) ); dsdesc.dwSize = sizeof( DSBUFFERDESC ); dsdesc.dwFlags = DSBCAPS_PRIMARYBUFFER; dsdesc.dwBufferBytes = 0; dsdesc.lpwfxFormat = NULL; ret = lpDS- CreateSoundBuffer( dsdesc, lpPrimary,NULL ); if( FAILED(ret) ) { printf( プライマリサウンドバッファ作成失敗\n ); return false; } // プライマリバッファのステータスを決定 wf.cbSize = sizeof( WAVEFORMATEX ); wf.wFormatTag = WAVE_FORMAT_PCM; wf.nChannels = 2; wf.nSamplesPerSec = 44100; wf.wBitsPerSample = 16; wf.nBlockAlign = wf.nChannels * wf.wBitsPerSample / 8; wf.nAvgBytesPerSec = wf.nSamplesPerSec * wf.nBlockAlign; ret = lpPrimary- SetFormat( wf ); if( FAILED(ret) ) { printf( プライマリバッファのステータス失敗\n ); return false; } return true; } // サウンドバッファの作成 BOOL CreateSoundBuffer( LPDIRECTSOUNDBUFFER *dsb,LPWSTR file ) { HRESULT ret; MMCKINFO mSrcWaveFile; MMCKINFO mSrcWaveFmt; MMCKINFO mSrcWaveData; LPWAVEFORMATEX wf; // WAVファイルをロード HMMIO hSrc; hSrc = mmioOpen( file,NULL,MMIO_ALLOCBUF|MMIO_READ|MMIO_COMPAT ); if( !hSrc ) { printf( WAVファイルロードエラー\n ); return FALSE; } // WAVE チャンクチェック ZeroMemory( mSrcWaveFile,sizeof(mSrcWaveFile) ); ret = mmioDescend( hSrc, mSrcWaveFile,NULL,MMIO_FINDRIFF ); if( mSrcWaveFile.fccType!=mmioFOURCC( W , A , V , E ) ) { printf( WAVEチャンクチェックエラー\n ); mmioClose( hSrc,0 ); return FALSE; } // fmt チャンクチェック ZeroMemory( mSrcWaveFmt,sizeof(mSrcWaveFmt) ); ret = mmioDescend( hSrc, mSrcWaveFmt, mSrcWaveFile,MMIO_FINDCHUNK ); if( mSrcWaveFmt.ckid!=mmioFOURCC( f , m , t , ) ) { printf( fmt チャンクチェックエラー\n ); mmioClose( hSrc,0 ); return FALSE; } // ヘッダサイズの計算 int iSrcHeaderSize = mSrcWaveFmt.cksize; if( iSrcHeaderSize sizeof(WAVEFORMATEX) ) iSrcHeaderSize=sizeof(WAVEFORMATEX); // ヘッダメモリ確保 wf = (LPWAVEFORMATEX)malloc( iSrcHeaderSize ); if( !wf ) { printf( メモリ確保エラー\n ); mmioClose( hSrc,0 ); return FALSE; } ZeroMemory( wf,iSrcHeaderSize ); // WAVEフォーマットのロード ret = mmioRead( hSrc,(char*)wf,mSrcWaveFmt.cksize ); if( FAILED(ret) ) { printf( WAVEフォーマットロードエラー\n ); free( wf ); mmioClose( hSrc,0 ); return FALSE; } printf( チャンネル数 = %d\n ,wf- nChannels ); printf( サンプリングレート = %d\n ,wf- nSamplesPerSec ); printf( ビットレート = %d\n ,wf- wBitsPerSample ); // fmtチャンクに戻る mmioAscend( hSrc, mSrcWaveFmt,0 ); // dataチャンクを探す while(1) { // 検索 ret = mmioDescend( hSrc, mSrcWaveData, mSrcWaveFile,0 ); if( FAILED(ret) ) { printf( dataチャンクが見つからない\n ); free( wf ); mmioClose( hSrc,0 ); return FALSE; } if( mSrcWaveData.ckid==mmioStringToFOURCC(L data ,0) ) break; // 次のチャンクへ ret = mmioAscend( hSrc, mSrcWaveData,0 ); } printf( データサイズ = %d\n ,mSrcWaveData.cksize ); // サウンドバッファの作成 DSBUFFERDESC dsdesc; ZeroMemory( dsdesc,sizeof(DSBUFFERDESC) ); dsdesc.dwSize = sizeof( DSBUFFERDESC ); dsdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_STATIC | DSBCAPS_LOCDEFER; dsdesc.dwBufferBytes = mSrcWaveData.cksize; dsdesc.lpwfxFormat = wf; dsdesc.guid3DAlgorithm = DS3DALG_DEFAULT; ret = lpDS- CreateSoundBuffer( dsdesc,dsb,NULL ); if( FAILED(ret) ) { printf( サウンドバッファの作成エラー\n ); free( wf ); mmioClose( hSrc,0 ); return FALSE; } // ロック開始 LPVOID pMem1,pMem2; DWORD dwSize1,dwSize2; ret = (*dsb)- Lock( 0,mSrcWaveData.cksize, pMem1, dwSize1, pMem2, dwSize2,0 ); if( FAILED(ret) ) { printf( ロック失敗\n ); free( wf ); mmioClose( hSrc,0 ); return FALSE; } // データ書き込み mmioRead( hSrc,(char*)pMem1,dwSize1 ); mmioRead( hSrc,(char*)pMem2,dwSize2 ); // ロック解除 (*dsb)- Unlock( pMem1,dwSize1,pMem2,dwSize2 ); // ヘッダ用メモリを開放 free( wf ); // WAVを閉じる mmioClose( hSrc,0 ); return TRUE; } void Exit() { SAFE_RELEASE(lpSecondary); SAFE_RELEASE(lpPrimary); SAFE_RELEASE(lpDS); } void display(void) { glClearColor(1.0, 1.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); glutSwapBuffers(); } void init() { EnumWindows(enumWindowsProc,0); // DirectSound if(!InitDS())Exit(); // プライマリサウンドバッファ if(!CreatePrimaryBuffer())Exit(); // サウンドバッファ if(!CreateSoundBuffer( lpSecondary,FileName))Exit(); // 起動時の再生 lpSecondary- Play( 0,0,0 ); } int main(int argc, char *argv[]) { glutInitWindowPosition(100, 100); glutInitWindowSize(WIDTH, HEIGHT); glutInitDisplayMode(GLUT_RGBA); glutInit( argc, argv); glutCreateWindow( Hellow DirectSound World !! ); glutDisplayFunc(display); init(); glutMainLoop(); Exit(); return 0; }